﻿/*
 * @Author: sakurahuang
 * @Description: 
 * @Date: 2025-07-04 22:16:10
 */
// test_shared_ptr.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <fstream>

using namespace std;
class Ball
{
public:
	Ball() {
		cout << "Ball appeared." << endl;
	}
	~Ball() {
		cout << "Ball disappeared." << endl;
	}
	void Bounce() {
		cout << "Ball Bounce." << endl;
	}
};

void closefile(ofstream* ofs) {
	if (ofs) {
		ofs->close();
	}
}

struct Bar { int i = 123; };
struct Foo { Bar bar; };

int main()
{
	{
		shared_ptr<Foo> f = make_shared<Foo>();
		cout << f.use_count() << endl;

		shared_ptr<Bar> b(f, &(f->bar));
		cout << f.use_count() << endl;

		cout << b->i << endl;
		return 0;
	}

	shared_ptr<Ball> sp;
	sp = make_shared<Ball>();
	sp.reset(new Ball);
	/*
	reset可以接收一个参数，这时sp会指向新的对象
	也就是这里传入的new Ball
	*/
	//shared_ptr<ofstream> sfp{ new ofstream("log.txt", ios::app), closefile };
	
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
